package com.zb.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zb.entity.SelectEmpAddressVo;
import com.zb.entity.SelectEmpVo;
import com.zb.entity.SelectVo;
import com.zb.entity.ZjUser;
import com.zb.vo.UserListVo;
import com.zb.vo.UserSelectSearch;
import com.zb.vo.UserSelectVo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * <p>
 * 用户表 Mapper 接口
 * </p>
 *
 * @author WEN
 * @since 2023-08-08
 */
public interface ZjUserMapper extends BaseMapper<ZjUser> {
    /**
     * 批量更改用户状态
     * @param idList 用户ID集合
     * @param status 状态：0-正常，1-冻结，2-禁用
     * @return
     */
    int updateBatchStatusByIds(@Param("idList") List<Long> idList, @Param("status") Integer status);

    /**
     * 根据手机号查询是否重复
     * @param custAccId 商家ID
     * @param id 用户ID
     * @param phone 手机号
     * @return
     */
    Integer existByPhone(@Param("custAccId") Long custAccId, @Param("id") Long id, @Param("phone") String phone);

    /**
     * 获取用户列表
     * @param custAccId 商家ID
     * @param selectVo 查询条件
     * @return
     */
    List<UserListVo> getList(@Param("custAccId") Long custAccId, @Param("selectVo") UserSelectVo selectVo);

    /**
     * 获取用户列表总记录数
     * @param custAccId 商家ID
     * @param selectVo 查询条件
     * @return
     */
    Long getListCount(@Param("custAccId") Long custAccId, @Param("selectVo") UserSelectVo selectVo);


    /**
     * 查询用户级别是否存在
     * @param levelIdList 用户级别ID集合
     * @return
     */
    List<String> existLevelTypeByUserLevelIds(@Param("levelIdList") List<Long> levelIdList);

    /**
     * 根据类型ID集合查询是否存在
     * @param userTypeIdList 用户分类ID集合
     * @return
     */
    List<String> existTypeByTypeIds(@Param("userTypeIdList") List<Long> userTypeIdList);

    /**
     * 分页获取用户下拉数据列表
     * @param custAccId 商家ID
     * @param selectVo 搜索条件
     * @return
     */
    List<SelectEmpAddressVo> pageSelect(@Param("custAccId") Long custAccId, @Param("selectVo") SelectVo selectVo);

    /**
     * 分页获取用户下拉数据列表总记录数
     * @param custAccId 商家ID
     * @param selectVo 搜索条件
     * @return
     */
    long pageSelectCount(@Param("custAccId") Long custAccId, @Param("selectVo") SelectVo selectVo);

    /**
     * 根据手机号查询用户ID
     * @param custAccId 商家ID
     * @param phone 手机号
     * @return
     */
    Long getIdByPhone(@Param("custAccId") Long custAccId, @Param("phone") String phone);

    /**
     * 根据手机号 | 登录账号查询
     * @param custAccId 商家ID
     * @param phone 手机号
     * @return
     */
    ZjUser getByPhone(@Param("custAccId") Long custAccId, @Param("phone") String phone);

    /**
     * 根据登录账号查询
     * @param custAccId 商家ID
     * @param account 登录账号
     * @return
     */
    ZjUser getByAccount(@Param("custAccId") Long custAccId, @Param("account") String account);

    /**
     * 获取出入库客户下拉数据列表
     * @param custAccId 商家ID
     * @param selectVo 搜索条件
     * @return
     */
    List<SelectEmpAddressVo> getStoreUserPageSelect(@Param("custAccId") Long custAccId, @Param("selectVo") SelectVo selectVo);

    /**
     * 获取出入库客户下拉数据列表总记录数
     * @param custAccId 商家ID
     * @param selectVo 搜索条件
     * @return
     */
    long getStoreUserPageSelectCount(@Param("custAccId") Long custAccId, @Param("selectVo") SelectVo selectVo);

    /**
     * 获取出库收货客户信息
     * @param custAccId 商家ID
     * @param selectVo 搜索条件
     * @return
     */
    List<SelectEmpAddressVo> getOutStoreUser(@Param("custAccId") Long custAccId, @Param("selectVo") SelectVo selectVo);

    /**
     * 获取出库收货客户信息总记录数
     * @param custAccId 商家ID
     * @param selectVo 搜索条件
     * @return
     */
    long getOutStoreUserCount(@Param("custAccId") Long custAccId, @Param("selectVo") SelectVo selectVo);

    /**
     * 获取报单客户下拉数据列表
     * @param custAccId 商家ID
     * @param search 搜索对象
     * @return
     */
    List<SelectEmpAddressVo> getOrderUserSelect(@Param("custAccId") Long custAccId, @Param("search") UserSelectSearch search);

    /**
     * 获取报单客户下拉数据列表总记录数
     * @param custAccId 商家ID
     * @param search 搜索对象
     * @return
     */
    long getOrderUserSelectCount(@Param("custAccId") Long custAccId, @Param("search") UserSelectSearch search);
}
